package view.simulationview;

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import controller.simulationcontroller.SimulationAreaListener;
import view.commonview.InfoPanel;
import view.commonview.TabbedPane;
import view.commonview.ToolBar;
import model.simulationmodel.SimulationModel;

/**
 * <b>Erbt:</b> <code>JPanel</code> <br>
 * <b>In Verbindung stehende Klassen:</b> <code>SimulationArea, 
 * SimulationToolPanel </code><br>
 * <b>Funktion:</b> Repraesentation Simulationsmodus <br>
 * <br>
 * Panel auf dem <code>SimulationArea</code> und das <code>SimulationToolPanel
 * </code> liegen.
 * 
 * @author Team Locsi
 * 
 */

@SuppressWarnings("serial")
public class SimulationPanel extends JPanel {

	/*
	 * Referenzen auf andere View-Objekte
	 */
	private SimulationArea simArea;
	private SimulationToolPanel simToolPanel;
	private JScrollPane simScroller;

	/**
	 * Der Konstruktor erzeugt ein neues <code>SimualtionPanel</code>-Objekt,
	 * wobei auch die Objekte <code>SimulationArea</code>, und
	 * <code>SimulationToolPanel</code> erzeugt werden.
	 * 
	 * @param sModel
	 *            <code>SimulationModel</code> - Referenz auf
	 *            <code>SimulationModel</code>
	 * @param tabs
	 *            <code>TabbedPane</code> - Referenz auf das
	 *            <code>TabbedPane</code>
	 * @param tools
	 *            <code>ToolBar</code> - Referenz auf die <code>ToolBar</code>
	 * @param iPaenl
	 *            <code>InfoPanel</code> - Referenz auf das
	 *            <code>InfoPanel</code>
	 */
	public SimulationPanel(SimulationModel sModel, TabbedPane tabs,
			ToolBar tools, InfoPanel iPanel) {
		this.simToolPanel = new SimulationToolPanel(tabs, sModel);
		this.simArea = new SimulationArea(this.simToolPanel, sModel, tabs, iPanel.getInfoArea());
		SimulationAreaListener simListener = new SimulationAreaListener(
				simArea, tools, sModel, tabs);
		this.simArea.addMouseListener(simListener);
		this.simArea.addMouseMotionListener(simListener);
		this.simScroller = new JScrollPane(simArea);
		this.simScroller
				.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		this.simScroller
				.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		simArea.setSimScroller(simScroller);
		this.setLayout(new BorderLayout());
		this.add(simScroller, BorderLayout.CENTER);
		this.add(simToolPanel, BorderLayout.SOUTH);
	}

	/**
	 * Gibt die <code>SimulationArea</code> zurueck
	 * 
	 * @return SimulationArea
	 */
	public SimulationArea getSimArea() {
		return this.simArea;
	}
	
	/**
	 * Gibt das <code>SimulationToolPanel</code> zurueck
	 * @return SimulationToolPanel
	 */
	public SimulationToolPanel getSimToolPanel() {
		return this.simToolPanel;
	}
}